﻿using System;
using System.Linq;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using CPTECH.Business;
using System.Collections;
using CPTECH.Repository;

namespace CPTECH.Presentation
{
    public partial class frm_planta : frm_default
    {
        int fluxo = 0;
        frm_validarInv validar = new frm_validarInv();
        frm_alterarItem alterar = new frm_alterarItem();

        public frm_planta(frm_alterarItem sendedAlterar, frm_validarInv sendedValidar, int sendedFluxo)
        {
            InitializeComponent();
            
            fluxo = sendedFluxo;
            validar = sendedValidar;
            alterar = sendedAlterar;
        }

        //volta para o form anterior.
        private void menuItem1_Click(object sender, EventArgs e)
        {
            this.closeForm();//usa o método herdado.
        }

        //método que efetua verificação, salva e chama  o form seguinte
        private void checkAndSave()
        {
            if (txt_codPlanta.Text == "" || txt_descPlanta.Text == "")
            {
                MessageBox.Show("Selecione uma Planta para continuar!", "Aviso");
                lst_planta.Focus();
            }
            else
            {
                //inventário
                if (fluxo == 0)
                {
                    FisicoBO.getInstance().codPlanta = txt_codPlanta.Text; ;

                    //chama form seguinte.
                    //chama o formulário de Fisico.
                    frm_fisico fisico = new frm_fisico();//cria instancia do novo form.
                    fisico.showForm(this);//exibi form novo.
                }
                //validar (re-inventário)
                else if (fluxo == 1)
                {
                    validar.sendedValues("planta", txt_codPlanta.Text.Trim());
                    this.closeForm();
                }
                //alterar.
                else
                {
                    alterar.sendedValues("planta", txt_codPlanta.Text.Trim());
                    this.closeForm();
                }
            }
        }

        //verifica campos.
        private bool verificaCampos()
        {
            bool campos = false;

            if (txt_codPlanta.Text == "")
            {
                MessageBox.Show("Insira um código de Planta para continuar!", "Planta");
                txt_codPlanta.Focus();
            }

            else if (txt_descPlanta.Text == "")
            {
                MessageBox.Show("Insira uma descrição de Planta para continuar!", "aPlant");
                txt_descPlanta.Focus();
            }
            else
            {
                campos = true;
            }

            return campos;
        }

        //muda botão de add para salvar e habilita os campos para inserção.
        private void activeInsert()
        {
            lst_planta.Enabled = false;
            bt_cancelar.Visible = true;
            txt_codPlanta.Enabled = true;
            txt_codPlanta.Text = "";
            txt_descPlanta.Enabled = true;
            txt_descPlanta.Text = "";
            txt_codPlanta.Focus();
            bt_add.Text = "Salvar";
        }

        //muda opção de salvar para add e desabilita os campos pra inserção.
        private void desactiveInsert()
        {
            lst_planta.Enabled = true;
            bt_cancelar.Visible = false;
            txt_codPlanta.Enabled = false;
            txt_codPlanta.Text = "";
            txt_descPlanta.Enabled = false;
            txt_descPlanta.Text = "";
            lst_planta.Focus();
            bt_add.Text = "Add";
        }

        //método que popula a list Box.
        private void showPlantas()
        {
            lst_planta.Items.Clear();
            ArrayList resultado = PlantaDB.getInstance().selectAllPlantas();

            for (int i = 0; i < resultado.Count; i++)
            {
                lst_planta.Items.Add(resultado[i].ToString());
            }
        }

        //chama método que popula o listBox com as plantas.
        private void frm_planta_Load(object sender, EventArgs e)
        {
            showPlantas();
        }

        //chama o método que cancela a inscerção de uma nova planta.
        private void bt_cancelar_Click(object sender, EventArgs e)
        {
            desactiveInsert();
        }

        //chama método que verifica, salva e chama o form seguinte.
        private void mnu_prosseguir_Click(object sender, EventArgs e)
        {
            checkAndSave();
        }

        //checa texto (habilita para o insert *Add || ou salva o mesmo *Salvar)
        private void bt_add_Click(object sender, EventArgs e)
        {
            if (bt_add.Text == "Add")
            {
                activeInsert();
            }
            else
            {
                string os = FisicoBO.getInstance().os;
                Int64 codFilial = Int64.Parse(FisicoBO.getInstance().codFilial);
                Int64 codlocal = Int64.Parse(FisicoBO.getInstance().codLocal);
                Int64 codPlanta = Int64.Parse(txt_codPlanta.Text);
                string descPlanta = txt_descPlanta.Text.ToUpper();
                string data = DateTime.Now.ToString("yyyy-MM-dd");

                if (PlantaDB.getInstance().checkCodPlanta(codPlanta))
                {
                    MessageBox.Show("Este código de Planta já existe, favor informar um novo!", "Planta");
                    txt_codPlanta.Text = "";
                    txt_codPlanta.Focus();
                }
                else if (verificaCampos())
                {
                    bool resposta = PlantaDB.getInstance().insertNewPlanta(os, codFilial, codlocal, codPlanta, descPlanta, data, 1);

                    if (resposta == true)
                    {
                        desactiveInsert();
                        MessageBox.Show("Planta inserida com sucesso!", "Planta");
                        txt_codPlanta.Text = codPlanta.ToString();
                        txt_descPlanta.Text = descPlanta;
                        showPlantas();
                    }

                    else if (resposta == false)
                    {
                        MessageBox.Show("Não foi possível adicionar a Planta, cheque os valores informados!", "Planta");
                        txt_codPlanta.Focus();
                    }
                }
            }

        }

        //permite apenas a inserção de números neste campo.
        private void txt_codPlanta_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!char.IsDigit(e.KeyChar))
            {
                e.Handled = true;
                MessageBox.Show("Somente números são permitidos neste campo!", "Aviso");
                txt_codPlanta.Text = "";
                txt_codPlanta.Focus();
            }
        }

        //seleciona o item selecionado no list.
        private void lst_planta_SelectedIndexChanged(object sender, EventArgs e)
        {
            string[] filalSeparada = lst_planta.SelectedItem.ToString().Split('=');
            txt_codPlanta.Text = "";
            txt_codPlanta.Text = filalSeparada[0].Trim();
            txt_descPlanta.Text = "";
            txt_descPlanta.Text = filalSeparada[1].Trim();
        }
    }
}